//package com.hitqz.robot.biz.service;
//
//import cn.hutool.core.util.StrUtil;
//import com.influxdb.client.*;
//import com.influxdb.client.domain.WritePrecision;
//import com.influxdb.client.write.Point;
//import jakarta.annotation.PostConstruct;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Service;
//
//import java.time.Instant;
//import java.util.Date;
//
//@Service
//@Slf4j
//public class InfluxDBService {
//
//    @Value("${influx.url:http://localhost:8086}")
//    private String influxUrl;
//
//    @Value("${influx.token:my-token-abc}")
//    private String token;
//
//    @Value("${influx.org:my-org}")
//    private String orgCode;
//
//    @Value("${influx.bucket:my-bucket}")
//    private String bucket;
//
//    private WriteApi writeApi;
//
//    private InfluxDBClient influxDBClient;
//    private boolean influxAvailable = false;
//
//    @PostConstruct
//    private void init() {
//        try {
////            WriteOptions options = WriteOptions.builder()
////                    .batchSize(500)
////                    .flushInterval(10_000) // 每 10 秒 flush
////                    .bufferLimit(10_000)
////                    .build();
//            influxDBClient = InfluxDBClientFactory.create(influxUrl, token.toCharArray(), orgCode, bucket);
////            writeApi = influxDBClient.makeWriteApi(options);
//            log.info("InfluxDB 2.x client initialized");
//            if (influxDBClient.ping()) {
//                influxAvailable = true;
//                log.info("InfluxDB 2.x is available");
//            }else {
//                influxAvailable = false;
//                log.warn("InfluxDB 2.x is not available");
//            }
//        } catch (Exception e) {
//            influxAvailable = false;
//            log.warn("InfluxDB 2.x init failed: {}", e.getMessage());
//        }
//    }
//
//    public void writeData(String deviceId, String gasType, double concentration) {
//        if (!influxAvailable || !StrUtil.isAllNotBlank(deviceId, gasType)) {
//            return;
//        }
//
//        Point point = Point.measurement("gas_data")
//                .addTag("device_id", deviceId)
//                .addTag("gas_type", gasType)
//                .addField("concentration", concentration)
//                .time(Instant.now(), WritePrecision.MS);
//
//        try {
//            writeApi.writePoint(point);
//        } catch (Exception e) {
//            log.error("Failed to write data to InfluxDB", e);
//        }
//    }
//
//    //todo
//    public String queryGasData(String deviceId, String gasType, Date startTime, Date endTime) {
//        if (!influxAvailable) {
//            return "";
//        }
//
//        String flux = """
//        from(bucket: "%s")
//          |> range(start: %s, stop: %s)
//          |> filter(fn: (r) => r["_measurement"] == "gas_data")
//          |> filter(fn: (r) => r["device_id"] == "%s" and r["gas_type"] == "%s")
//          |> filter(fn: (r) => r["_field"] == "concentration")
//        """.formatted(
//                bucket,
//                startTime.toInstant(),
//                endTime.toInstant(),
//                deviceId,
//                gasType
//        );
//
//        QueryApi queryApi = influxDBClient.getQueryApi();
//        return queryApi.queryRaw(flux);
//    }
//}